﻿
// QQLoginDlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "QQLogin.h"
#include "QQLoginDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CQQLoginDlg 对话框



CQQLoginDlg::CQQLoginDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_QQLOGIN_DIALOG, pParent),
	m_close(L"./res/normal_close.bmp", L"./res/normal_close.bmp", L"./res/push_close.bmp"),
	m_max(L"./res/normal_max.bmp", L"./res/normal_max.bmp", L"./res/push_max.bmp"),
	m_min(L"./res/normal_min.bmp", L"./res/normal_min.bmp", L"./res/push_min.bmp")
{
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_QQ);
}

void CQQLoginDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_BUTTON_CLOSE, m_close);
	DDX_Control(pDX, IDC_BUTTON_MAX, m_max);
	DDX_Control(pDX, IDC_BUTTON_MIN, m_min);
}

BEGIN_MESSAGE_MAP(CQQLoginDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_NCHITTEST()
	ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CQQLoginDlg::OnBnClickedButtonClose)
	ON_BN_CLICKED(IDC_BUTTON_MAX, &CQQLoginDlg::OnBnClickedButtonMax)
	ON_BN_CLICKED(IDC_BUTTON_MIN, &CQQLoginDlg::OnBnClickedButtonMin)
END_MESSAGE_MAP()


// CQQLoginDlg 消息处理程序

BOOL CQQLoginDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时，框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	//设置窗口大小
	SetWindowPos(NULL, 0, 0, 420, 330, SWP_NOMOVE);

	//把3个按钮移动到窗口的右上角
	CRect rect;
	GetClientRect(&rect);
	m_close.MoveWindow(rect.Width() - 38, 2, 32, 30);
	m_max.MoveWindow(rect.Width() - 76, 2, 32, 30);
	m_min.MoveWindow(rect.Width() - 114, 2, 32, 30);

	return TRUE;  // 除非将焦点设置到控件，否则返回 TRUE
}

// 如果向对话框添加最小化按钮，则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序，
//  这将由框架自动完成。

void CQQLoginDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CPaintDC dc(this);
		CRect rect;
		GetClientRect(&rect);
		//画一下标题栏
		CRect titleRect(0, 0, rect.Width(), 128);
		dc.FillSolidRect(titleRect, RGB(114, 123, 255));

		//绘制客户区
		CRect clientRect(0, 128, rect.Width(), rect.Height());
		dc.FillSolidRect(clientRect, RGB(255, 255, 255));
		//绘制图标
		DrawIconEx(dc.GetSafeHdc(), 10, 10, m_hIcon, 32, 32, 0, NULL, DI_NORMAL);
		//绘制文字
		dc.SetBkMode(TRANSPARENT);
		dc.SetTextColor(RGB(255, 255, 255));
		CFont font;
		font.CreatePointFont(160, L"微软雅黑");
		dc.SelectObject(&font);
		dc.TextOutW(45, 12, L"QQ");

		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CQQLoginDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



LRESULT CQQLoginDlg::OnNcHitTest(CPoint point)
{
	//实现客户区鼠标拖动窗口
	LRESULT result = CDialogEx::OnNcHitTest(point);
	if (result == HTCLIENT)
		result = HTCAPTION;

	return result;
}


void CQQLoginDlg::OnBnClickedButtonClose()
{
	OnCancel();//关闭窗口
}


void CQQLoginDlg::OnBnClickedButtonMax()
{
	if (IsZoomed())
		SendMessage(WM_SYSCOMMAND, SC_RESTORE);//还原
	else
		SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE);//最大化
	CRect rect;
	GetClientRect(&rect);
	m_close.MoveWindow(rect.Width() - 38, 2, 32, 30);
	m_max.MoveWindow(rect.Width() - 76, 2, 32, 30);
	m_min.MoveWindow(rect.Width() - 114, 2, 32, 30);
}


void CQQLoginDlg::OnBnClickedButtonMin()
{
	SendMessage(WM_SYSCOMMAND, SC_MINIMIZE);//最小化
}
